package br.com.foxinline.manager.criar;

import br.com.foxinline.modelo.Protocolo;
import br.com.foxinline.modelo.Secao;
import br.com.foxinline.modelo.Tramite;
import br.com.foxinline.modelo.Usuario;
import br.com.foxinline.servico.ProtocoloServico;
import br.com.foxinline.servico.SecaoServico;
import br.com.foxinline.servico.TramiteServico;
import br.com.foxinline.servico.UsuarioServico;
import br.com.foxinline.utilitario.Caracteres;
import br.com.foxinline.utilitario.Mensagem;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author cadomeireles
 */
@ViewScoped
@ManagedBean
public class ManagerCriarTramite implements Serializable {

    @EJB
    TramiteServico tramiteServico;
    @EJB
    ProtocoloServico protocoloServico;
    @EJB
    UsuarioServico usuarioServico;
    @EJB
    SecaoServico secaoServico;
    
    private Tramite tramite;
    private Protocolo protocolo;
    
    private String editarId;

    @PostConstruct
    public void init() {
        instanciar();
        delegar();
    }    
    
    private void instanciar() {
        this.tramite = new Tramite();
        this.protocolo = new Protocolo();
    }    

    private void delegar() {
        Map<String, String> parametros = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        this.editarId = parametros.get("tramiteId");        
        
        if (editarId != null) {
            this.tramite = tramiteServico.pesquisar(Long.parseLong(editarId));
            this.protocolo = this.tramite.getProtocolo();
        }
    }

    public Protocolo pesquisarProtocolo() {
        this.protocolo = protocoloServico.pesquisarPorCodigo(this.protocolo);
        return this.protocolo;
    }
    
    public void salvar() {
        String mensagem;
        
        this.tramite.setProtocolo(this.protocolo);
        
        if (this.tramite.getId() == null) {
            tramiteServico.salvar(this.tramite);
            mensagem = "Trâmite cadastrado com sucesso!";
            instanciar();
        } else {
            tramiteServico.atualizar(this.tramite);
            mensagem = "Trâmite atualizado com sucesso!";
        }
        
        Mensagem.messagemInfo(mensagem);    
    }
    
    public List<Usuario> autocompletarUsuario(String query) {
        return usuarioServico.autocompletar(query);
    }

    public List<Secao> autocompletarSecao(String query) {
        return secaoServico.autocompletar(query);
    }    
    
    public String adicionarMascaraCNPJ(String string) {
        return  Caracteres.adicionarMascara(string, Caracteres.cnpjMask);
    }

    public String adicionarMascaraCPF(String string) {
        return  Caracteres.adicionarMascara(string, Caracteres.cpfMask);
    }

    public Tramite getTramite() {
        return tramite;
    }

    public void setTramite(Tramite tramite) {
        this.tramite = tramite;
    }

    public Protocolo getProtocolo() {
        return protocolo;
    }

    public void setProtocolo(Protocolo protocolo) {
        this.protocolo = protocolo;
    }
    
}
